package com.tjetc;

import java.util.Arrays;
import java.util.Scanner;

public class _10HomeWork {
    public static void main(String[] args) {
        int[] num = new int[0]; // 无意义
//        System.out.println(num[0]);
        System.out.printf("%.2f", 1.33333); // 格式化使用
    }

    public static void main7(String[] args) {
        /*
        课后题：实现数组的缩减
        有一个数组{1,2,3,4,5},可以将该数组进行缩减，提示用户是否继续缩减，每次缩减最后那个元素。
        当只剩下最后一个元素，提示，不能再缩减。

        思路分析：
        1.输入
            是否缩减
        2.输出
            缩减后的数组内容
        3.处理逻辑
            (1) 正常缩减
            （2）考虑缩减到最后一个情况
            （3）如果通过循环进行缩减

         */
//        int[] nums = {1, 2, 3, 4, 5};
//        // 实现缩减
//        int[] newNums = new int[nums.length - 1];
//        // 将老数据拿过来
//        for (int i = 0; i < newNums.length; i++) {
//            newNums[i] = nums[i];
//        }
//        System.out.println(Arrays.toString(newNums));


        Scanner scanner = new Scanner(System.in);
        int[] nums = {1, 2, 3, 4, 5};
        System.out.println(Arrays.toString(nums));
        // 使用while 和do...while 根据实际需求来定
        while (true) {
            System.out.println("请输入是否缩减：y/n");
            char confirm = scanner.next().charAt(0);
            if (confirm == 'n') {
                System.out.println(Arrays.toString(nums));
                break;
            }
            //缩减条件
            if (nums.length == 1) {
                System.out.println("数组不能在缩减了");
                break;
            } else {
                // 实现缩减
                int[] newNums = new int[nums.length - 1];
                // 将老数据拿过来
                for (int i = 0; i < newNums.length; i++) {
                    newNums[i] = nums[i];
                }
                nums = newNums;
                System.out.println(Arrays.toString(nums));
            }

        }


    }

    public static void main6(String[] args) {
        // 9.求1+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+2+3+..+100)的结果

        /*
            1
            1 + 2
            1 + 2 + 3
            1 + 2 + 3 + 4
            ....
            列数由行数来控制的


         */

        /*
            思路分析：
            1.输入
            2.输出
            3.处理逻辑
            （1）1 + 100的和
            (2) 100个 1-100的和
            (3) 1+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+2+3+..+100)
               （4）
               （5）
               （6）
              ...
               （100）
         */
        int num = 1;
        int sum = 0;
//        for (int i = 0; i < 100; i++) {
//            sum += num;
//            num++;
//        }
//        System.out.println(sum);

        int totalSum = 0;
        for (int j = 0; j < 100; j++) {
            // 此时的sum 是上一轮循环用过的sum
            sum = 0;
            // 此时的num 是上一轮循环用过的num
            num = 1;
            for (int i = 0; i <= j; i++) {
                sum += num;
                num++;
            }
            totalSum += sum;

        }
        System.out.println(totalSum);
    }

    public static void main5(String[] args) {

        /*
            8.求出 1/1 -1/2 + 1/3 - 1/4 …… 1/100的和

            思路分析：
            1.输入

            2.输出
                输出和
            3.处理逻辑
                （1）1/ 1 + 1/ 2 + 1 / 3 ..... 1 / 100
                (2) 单数 +  偶数 -
         */
        double num1 = 1.0;
        int num2 = 1;
        double sum = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                sum -= num1 / num2;
            } else {
                sum += num1 / num2;
            }
            num2++;
        }
        System.out.println(sum);
    }

    public static void main4(String[] args) {
        /*
        6.输出1-100之间的不能被5整除的数，每5个一行
         */
        int num = 1;
        int count = 0;
        for (int i = 0; i < 100; i++) {
            if (num % 5 != 0) {
                System.out.print(num);
                count++;
                // 每5个一行
                if (count % 5 == 0) {
                    System.out.println();
                }
            }
            num++;
        }


    }

    public static void main3(String[] args) {
        /*
            3.判断一个整数是否是水仙花数，所谓水仙花数是指一个3位数，其各个位上数字立方
                和等于其本身。例如：153=1*1*1+3*3*3+5*5*5

            思路分析：
            1.输入
                给一个数
                int num = 153;
            2.输出
                是否是水仙花数
            3.处理逻辑
                （1）判断153是否是水仙花数
                    先取出所有位数
                    根据条件判断是不是
                （2）循环判断三位数
         */
        // 取末位 % 10 截断最后一位 /10
//        int num = 153;
//        int ge = num % 10;
//        int shi = num / 10 % 10;
//        int bai = num / 10 / 10 % 10;
//        if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == num) {
//            System.out.println(num);
//        }

        // 使用循环解决所有三位数
        int num = 153;
//        for (int i = 0; i < 900; i++) {
//            int ge = num % 10;
//            int shi = num / 10 % 10;
//            int bai = num / 10 / 10 % 10;
//            if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == num) {
//                System.out.println(num);
//            }
//            num++;
//        }

        // 优化一下
        for (int j = 0; j < 900; j++) {
            int sum = 0;
            int num1 = num;
            for (int i = 0; i < 3; i++) {
                // 取末位
                int temp = num1 % 10;
                // 求和
                sum += temp * temp * temp;
                // 截断最后一位
                num1 = num1 / 10;
            }
            // 判断立方和和自身是否相同
            if (sum == num) {
                System.out.println(num);
            }
            num++;
        }


    }

    public static void main2(String[] args) {
        /*
            某人有100,000元，每经过一次路口，需要交费，规则如下：
            1)当现金>50000时，每次交5%
            2)当现金<=50000时，每次交1000
            思路分析：
            1.输入
                💰
                double money = 100000;
            2.输出
                剩余金额
            3.处理逻辑
                (1)使用判断 双分支
                    条件：
                    true：
                    false：
                (2) 使用循环 我们不知道有多少路口 所以用无限循环
                while (true)

                改用多分支

                (3) 统计路口
         */
        double money = 100000;
        // 路口数
        int count = 0;
        // 升级使用循环
        while (true) {
            if (money > 50000) {
                money = money - money * 0.05;
            } else if (money >= 1000) {
                money = money - 1000;
            } else {
                System.out.println(money);
                break;
            }
            count++;
        }
        System.out.println(count);


    }

    public static void main1(String[] args) {
        /*
            9*9乘法表
            思路分析：
            1.输入

            2.输出
                输出内容
            3.处理逻辑
                （1）1 x 9 = 9 2 x 9 = 18 ......  9 x 9 = 81
                  (2) 9 行 9 列
         */
        int num1 = 1;
        int num2 = 1;
//        for (int i = 0; i < 9; i++) {
//            System.out.print(num1 + "x" + num2 + " = " + num1 * num2 + "\t");
//            num1++;
//        }

//        for (int j = 0; j < 9; j++) {
//            num1 = 1;
//            for (int i = 0; i < 9; i++) {
//                System.out.print(num1 + "x" + num2 + " = " + num1 * num2 + "\t");
//                num1++;
//            }
//            System.out.println();
//        }


        for (int i = 0; i < 9; i++) {
            num1 = 1;
            for (int j = 0; j <= i; j++) {
                System.out.print(num1 + "x" + num2 + " = " + num1 * num2 + "\t");
                num1++;
            }
            num2++;

            System.out.println();
        }


    }
}
